import axios from 'axios'; // 引入axios
import qs from 'qs';  // 引入qs模块，用来序列化post类型的数据
import { Toast } from 'vant';   // vant的toast提示框组件，大家可根据自己的ui组件更改。
import store from '../store/index'

// axios 配置
axios.defaults.timeout = 10000;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
// axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8';
axios.defaults.baseURL = process.env.API_ROOT;

// 请求拦截器
axios.interceptors.request.use((config) => {
  // 每次发送请求之前判断是否存在token，如果存在，则统一在http请求的header都加上token，不用每次请求都手动添加了
  // 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断
  // const token = store.getters.token;
  // token && (config.headers.accessToken  = token);
  // console.log("请求头token",token)
  return config;
}, (error) => {
  Toast.fail('错误传参');
  return Promise.reject(error);
})

// 响应拦截器
axios.interceptors.response.use((res) => {
  if (res.status === 200) {
    return res;
  }
  return Promise.reject(res);
}, (error) => {
  switch (error.response.status) {  // 这个条件看后端返回什么 具体去获取状态码
    case 401:
      Toast.fail('很抱歉，登录已过期，请重新登录');
      store.dispatch('setSignOut')
      router.replace({
        path: '/user/login',
        query: {redirect: router.currentRoute.fullPath}//登录成功后跳入浏览的当前页面
      })
      break
  }
  return Promise.reject(error);
});


/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function get(url, params){
    return new Promise((resolve, reject) =>{
        axios.get(url, {
            params: params
        })
        .then(res => {
            resolve(res.data);
        })
        .catch(err => {
            reject(err.data)
        })
    });
}
/**
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function post(url, params) {
    return new Promise((resolve, reject) => {
        axios.post(url,qs.stringify(params))
        .then(res => {
            resolve(res.data);
        })
        .catch(err => {
            reject(err.data)
        })
    });
}

